package com.daafan.minilib.data;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.tsz.afinal.FinalDb;
import android.content.Context;

public class BaseList<T> {

	public int		page;
	public int		size;
	public int		count;
	public int		pagecount;
	public List<T>	datas	= new ArrayList<T>();

	public void add(Context context, T object) {
		FinalDb db = FinalDb.create(context);
		db.save(object);

		datas.add(object);
	}

	public void restore(Context context) {
		FinalDb db = FinalDb.create(context);
		datas = db.findAll(getTType(), "id");// 找到T表所有元素,datas储存所有T对象

		System.out.println("restore type=" + getTType());
	}

	public void saveList(Context context) {
		FinalDb db = FinalDb.create(context);

		for (T obj : datas) {
			if (obj != null)
				db.save(obj);
		}
	}

	public void delete(Context context, T obj) {
		FinalDb db = FinalDb.create(context);

		db.delete(db);
	}

	public void deleteAllList(Context context) {
		FinalDb db = FinalDb.create(context);

		db.deleteByWhere(getTType(), "");
		datas.clear();
	}

	/** 获取泛型T的类型 */
	@SuppressWarnings("unchecked")
	private Class<T> getTType() {
		// 获取T类型(从datas<T> 或者 BaseList<T> 获取)
		Type superClazzClass = super.getClass().getGenericSuperclass();// 子类调用此方法，会获取继承的父类的泛型T类型
		Class<T> clazz = (Class<T>) ((ParameterizedType) superClazzClass).getActualTypeArguments()[0];

		return clazz;
	}
}
